#ifndef WIDGET_H
#define WIDGET_H
#include <QCloseEvent>
#include <QWidget>
#include <iostream>
#include <vector>
#include <string>
#include <pthread.h>
#include <QListWidgetItem>
#include <map>
#include <QFont>

#define SLEEP_TIME (100000)
using namespace std;
namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    friend void *showSongThread(void * arg);
    friend void *getTimerThreadFunc(void *arg);
    friend void *readPipeMSG(void *arg);
    explicit Widget(QWidget *parent = 0);
    ~Widget();
    //初始化mplayer
    void mplayerInit(void);
    //扫描歌曲文件夹下的歌曲
    void scanSong();
    // 窗口关闭时关闭mplayer
    void closeEvent( QCloseEvent *);
    // 解析歌词
    void dealSong(string pathName,int pathNameLen);
    // 重写绘图事件
    void paintEvent(QPaintEvent *);


private:
    Ui::Widget *ui;
    //定义一个有名管道
    int fifo_fd;
    //定义一个无名管道
    int fd[2];
    //定义一个当前播放的歌曲下标
    int index;
    //定义一个容器存放song目录下的歌曲
    vector<string> vectorSong;
    //定义一个mplayer的进程号
    pid_t pidMplayer;
    //定义一个暂停标志
    bool flag_pause;
    //定义一个静音判断标志
    int muteFlag;
    //定义一个条件变量判断标志
    bool condFlag;
    //定义一个切歌标志
    int changeSongFlag;
    pthread_mutex_t mutexFifo;
    pthread_cond_t condFifo;
    //当前歌曲总时间
    int totalTime;
    //当前歌曲当前时间
    int currentTime;
    //存放歌词的容器
    map<int,string> songMap;
    //字体大小控制
    QFont fontSize;
     //播放模式  0:列表循环 1:单曲循环 2:顺序播放  3:随机播放
    int playMode;
    //播放倍速
    int speedMode;
    //被点击歌词对应的时间
    int clickSongTime; //
    // map<行号,歌词对应时间>  为了通过行号获取歌词对应的时间
    map<int,int> rowLinkTime;




public slots:
    void sliderClikedSlot();
    void sliderReleasedSlot();
    void sliderVoiceReleasedSlot();
    void playSong(void);
    void playNextSong(void);
    void playPreSong(void);
    void setVoice(void);
    void setCurrentTimeLabel(int time);
    void setTotalTimeLabel(int time);
    void setCurrentSlider(int currentProgress);
    void songListSlot(QListWidgetItem *item);
    void songShowListSlot(QListWidgetItem *item);
    void playModeChange();
    void changeSongByModeSlot();
    void speedModeChange();
signals:
    //当前时间信号
    void currentTimeSignal(int time);
    void currentProgressSignal(int currentProgress);
    void totalTimeSignal(int totalTime);
    void changeSongByMode();
};

#endif // WIDGET_H
